package com.shenghua.service.impl;

import com.alibaba.fastjson.JSON;
import com.shenghua.dao.mapper.RoleLimitMapper;
import com.shenghua.dao.mapper.RolesMapper;
import com.shenghua.dao.mapperX.RoleLimitMapperX;
import com.shenghua.dao.model.RoleLimitX;
import com.shenghua.dao.model.Roles;
import com.shenghua.dao.model.RolesExample;
import com.shenghua.service.RoleLimitService;
import com.shenghua.utils.ListUtils;
import com.shenghua.utils.StringUtils;
import com.shenghua.utils.beans.Constants;
import com.shenghua.utils.beans.Dto;
import com.shenghua.utils.beans.ErrorCode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * Created by Administrator on 2019/4/5.
 */
@Service
public class RoleLimitServiceImpl implements RoleLimitService {
    Logger logger = LoggerFactory.getLogger(RoleLimitServiceImpl.class);
    @Resource
    private RoleLimitMapperX roleLimitMapperX;
    @Resource
    private RolesMapper rolesMapper;

    @Override
    public Dto<List<RoleLimitX>> queryMenuLimitByRoleId_normal(String roleId) {
        Dto<List<RoleLimitX>> dto = new Dto<>();
        if(StringUtils.isNotBlank(roleId)) {
            Roles roles = rolesMapper.selectByPrimaryKey(Integer.parseInt(roleId));
            // 超级管理员拥有所有权限
            if(StringUtils.isNotBlank(roles.getSign()) && Constants.ROLES_SUPER_ADMIN.equals(roles.getSign())) {
                List<RoleLimitX> roleLimitXList1 = roleLimitMapperX.queryAllMenuLimit_normal();
                if(ListUtils.isNotEmpty(roleLimitXList1)) {
                    dto.ReturnSuccess(roleLimitXList1, ErrorCode.ROLELIMIT_QUERY_SUCCESS);
                    return dto;
                }
            }
        }
        List<RoleLimitX> roleLimitXList = roleLimitMapperX.queryMenuLimitByRoleId_normal(roleId);
        if(ListUtils.isNotEmpty(roleLimitXList)) {
            dto.ReturnSuccess(roleLimitXList, ErrorCode.ROLELIMIT_QUERY_SUCCESS);
        } else {
            dto.ReturnFail(null, ErrorCode.ROLELIMIT_QUERY_FAIL);
        }
        return dto;
    }

    @Override
    public Dto<RoleLimitX> queryTabPage() {
        return null;
    }

    /**
     * 查询角色按钮权限
     *
     * @param roleId
     * @param parentCode
     * @return
     */
    @Override
    public Dto<List<RoleLimitX>> queryButtonLimit_normal(String roleId, String parentCode) {
        Dto<List<RoleLimitX>> dto = new Dto<List<RoleLimitX>>();
        if(StringUtils.isNotBlank(roleId)) {
            Roles roles = rolesMapper.selectByPrimaryKey(Integer.parseInt(roleId));
            // 超级管理员拥有所有权限
            if(StringUtils.isNotBlank(roles.getSign()) && Constants.ROLES_SUPER_ADMIN.equals(roles.getSign())) {
                List<RoleLimitX> roleLimitXList1 = roleLimitMapperX.queryAllButtonLimit_normal(parentCode);
                logger.info("[RoleLimitServiceImpl] queryButtonLimit_normal roleLimitXList1:{}", JSON.toJSONString(roleLimitXList1));
                if(ListUtils.isNotEmpty(roleLimitXList1)) {
                    dto.ReturnSuccess(roleLimitXList1, ErrorCode.ROLELIMIT_QUERY_SUCCESS);
                    return dto;
                }
            }
        }
        List<RoleLimitX> roleLimitXList = roleLimitMapperX.queryButtonLimit_normal(roleId, parentCode);
        logger.info("[RoleLimitServiceImpl] queryButtonLimit_normal roleLimitXList:{}", JSON.toJSONString(roleLimitXList));
        if(ListUtils.isNotEmpty(roleLimitXList)) {
            dto.ReturnSuccess(roleLimitXList, ErrorCode.ROLELIMIT_QUERY_SUCCESS);
        } else {
            dto.ReturnFail(null, ErrorCode.ROLELIMIT_QUERY_FAIL);
        }
        return dto;
    }

    /**
     * 查询角色所有的权限
     *
     * @param roleId
     * @return
     */
    @Override
    public Dto<List<RoleLimitX>> queryLimitByRoleId_normal(String roleId) {
        Dto<List<RoleLimitX>> dto = new Dto<List<RoleLimitX>>();
        if(StringUtils.isNotBlank(roleId)) {
            Roles roles = rolesMapper.selectByPrimaryKey(Integer.parseInt(roleId));
            // 超级管理员拥有所有权限
            if(StringUtils.isNotBlank(roles.getSign()) && Constants.ROLES_SUPER_ADMIN.equals(roles.getSign())) {
                List<RoleLimitX> roleLimitXList1 = roleLimitMapperX.queryAllLimit_normal();
                logger.info("[RoleLimitServiceImpl] queryLimitByRoleId_normal roleLimitXList1:{}", JSON.toJSONString(roleLimitXList1));
                if(ListUtils.isNotEmpty(roleLimitXList1)) {
                    dto.ReturnSuccess(roleLimitXList1, ErrorCode.ROLELIMIT_QUERY_SUCCESS);
                    return dto;
                }
            }
        }
        List<RoleLimitX> roleLimitXList = roleLimitMapperX.queryLimit_normal(roleId);
        logger.info("[RoleLimitServiceImpl] queryLimitByRoleId_normal roleLimitXList:{}", JSON.toJSONString(roleLimitXList));
        if(ListUtils.isNotEmpty(roleLimitXList)) {
            dto.ReturnSuccess(roleLimitXList, ErrorCode.ROLELIMIT_QUERY_SUCCESS);
        } else {
            dto.ReturnFail(null, ErrorCode.ROLELIMIT_QUERY_FAIL);
        }
        return dto;
    }
}
